
public class Test {
    public static void main(String[] args) throws Exception {
        // Class是由JVM在执行过程中动态加载的
        // [参考](https://liaoxuefeng.com/books/java/reflection/class/index.html)
        // 1、获取原始class类型
        Class<String> cls = String.class;
        System.out.println("类的名称：" + cls.getName());
        String str = "Hello, World!";
        Class<? extends String> cls2 = str.getClass();
        System.out.println("类的名称：" + cls2.getName());
        Class<?> cls3 = Class.forName("java.lang.String");
        System.out.println("类的名称：" + cls3.getName());

        // 创建一个String实例:
        String s = (String) cls.newInstance();
        System.out.println("实例内容：" + s);

        // 获取原始class信息
        System.out.println("是否是接口：" + cls.isInterface());
        System.out.println("是否是数组：" + cls.isArray());
        System.out.println("是否是枚举类：" + cls.isEnum());
    }

}
// JVM为每个加载的class及interface创建了对应的Class实例来保存class及interface的所有信息；
// 获取一个class对应的Class实例后，就可以获取该class的所有信息；
// 通过Class实例获取class信息的方法称为反射（Reflection）；
// JVM总是动态加载class，可以在运行期根据条件来控制加载class。
